首先,來聽首歌吧!
這是無意間聽到的一首歌,覺得很好聽,就來跟大家分享惹~
Flash 的值只會被存到下一個 request 中,如果我再次轉到另一個網頁, flash 就會被清空,所以常常被拿來用在表示錯誤訊息或者提示訊息
flash 的資料結構是 hash,只要記住這點就很容易理解怎麼使用,請看下面範例
#下面三種結果相同
redirect_to root_path, flash[:notice] = "Welcome Home!"
redirect_to root_path, flash: { notice: "Welcome Home!"}
#因為太常使用,所以Rails又提供下面這種簡寫
redirect_to root_path, notice: "Welcome Home!"
當然 falsh 能使用的 key 不只有 notice,你也可以存其他的 key,比方說 flash[:qoo]
或者 flash[:signed_status]
等等
Flash 只能存活在經過一個 request 之後,但如果想要讓他存活久一點可以使用 keep
這個方法
class QoosController < ApplicationController
def index
flash.keep
#也可以只讓其中一個 key-value pair 存久一點
flash.keep(:notice)
redirect_to qoo2s_path
end
end
另外,在某些情況下不會 trigger 新的 request,但還是想使用 flash就可以使用 now
這個方法
class QoosController < ApplicationController
def create
@user = User.new(params[clean_params])
if @user.save
# ...
else
flash.now[:notice] = "No new user created"
render action: "new"
end
end
end
在上面的例子中,儲存失敗的情況下借用 new.html.erb 的畫面,但這並不會有新的 request,這時候就要用 now
的方法才能即時存到 flash
參考資料
Rails Guide
本文章同步分享於 http://anthonychao.site/